/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package formula.one.urjc.mundial.view;

import formula.one.urjc.Metodos;
import formula.one.urjc.carrera.Carrera;
import formula.one.urjc.circuito.Circuito;
import formula.one.urjc.dueño.view.ventanaAviso;
import formula.one.urjc.escuderia.Escuderia;
import formula.one.urjc.mundial.Mundial;
import java.io.File;
import java.util.ArrayList;
import javax.swing.DefaultListModel;
import javax.swing.JOptionPane;

/**
 *
 * @author santiago
 */
public class GestionMundial extends javax.swing.JInternalFrame {
    
    //VARIABLES GLOBALES
    //Declaramos este objeto para ejecutar los metodos genericos
    Metodos metodo = new Metodos() ;
    String nombreFicheroMundial = "mundial.dat" ;
    String nombreFicheroEscud = "escuderias.dat" ;
    private Mundial mundialFUno;
    private ArrayList<Integer> pendientes;
    private ArrayList<Integer> celebradas;
    /**
     * Creates new form gestionMundial
     */
    public GestionMundial() {
        initComponents();
        pendientes=new ArrayList<Integer>();
        celebradas=new ArrayList<Integer>();
        //mundialFUno=metodo.getMundial();
        cargarVista();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        empezarMundial = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        jListPendientes = new javax.swing.JList();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jScrollPane2 = new javax.swing.JScrollPane();
        jListCelebradas = new javax.swing.JList();
        jBtSalida = new javax.swing.JButton();
        jBtClasif = new javax.swing.JButton();

        empezarMundial.setText("Empezar Mundial");
        empezarMundial.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                empezarMundialActionPerformed(evt);
            }
        });

        jListPendientes.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        jScrollPane1.setViewportView(jListPendientes);

        jLabel1.setText("Carreras Pendientes:");

        jLabel2.setText("Carreras celebradas:");

        jListCelebradas.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        jScrollPane2.setViewportView(jListCelebradas);

        jBtSalida.setText("Dar salida");
        jBtSalida.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBtSalidaActionPerformed(evt);
            }
        });

        jBtClasif.setText("Clasificación carrera");
        jBtClasif.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBtClasifActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel1)
                            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 157, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGroup(layout.createSequentialGroup()
                                .addGap(21, 21, 21)
                                .addComponent(jBtSalida)))
                        .addGap(30, 30, 30)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel2)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                .addComponent(jBtClasif)
                                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 164, javax.swing.GroupLayout.PREFERRED_SIZE))))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(121, 121, 121)
                        .addComponent(empezarMundial)))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(9, 9, 9)
                .addComponent(empezarMundial)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(jLabel2))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jBtSalida)
                    .addComponent(jBtClasif))
                .addContainerGap(38, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void empezarMundialActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_empezarMundialActionPerformed
       boolean comenzar=true;
        //aviso para ver si se quiere crear otro mundial
        if(new File(nombreFicheroMundial).exists()){
            int res=ventanaAviso.mostrarConfirmacion(this, "Existe un mundial creado, ¿Está seguro de comenzar otro mundial?.\nLos datos del otro mundial se perderán", "Comenzar mundial");
            if(res!=JOptionPane.OK_OPTION){
                comenzar=false;
            }
        }
        if(comenzar){
           // Leemos las escuderias del fichero escuderias.dat
            ArrayList<Object> listEscuderias = metodo.getEscuderiasList() ;
            //
            // Guardamos el listado de Escuderias
            ArrayList<Escuderia> allEscuderias = new ArrayList<Escuderia>() ;
            for (int j=0; j<listEscuderias.size(); j++) {
                ((Escuderia) listEscuderias.get(j)).empezarMundial();
                //System.out.println(listEscuderias.get(j)) ;
                allEscuderias.add((Escuderia) listEscuderias.get(j)) ;
            }        
            // Leemos los circuitos del fichero circuitos.dat
            ArrayList<Object> listCircuitos = metodo.getCircuitoList() ;
        
        
        
            // Declaramos el array de carreras
            ArrayList<Carrera> allCarreras = new ArrayList<Carrera>() ;
            // 
            // Guardamos el listado de Circuitos
            ArrayList<Circuito> allCircuitos = new ArrayList<Circuito>() ;
            for (int i=0; i<listCircuitos.size(); i++) {
                //System.out.println(listCircuitos.get(i)) ;
                allCircuitos.add((Circuito) listCircuitos.get(i)) ;
            //Carrera carreraMundial = new Carrera((Circuito) listCircuitos.get(i), allEscuderias) ;
            //carreraMundial.doCarrera() ;
            //System.out.println(i + ": " + carreraMundial.toString()) ;
            //allCarreras.add(carreraMundial) ;
            }
            if (allCircuitos.size()>0 && allEscuderias.size()>0){
                mundialFUno=new Mundial(allCircuitos, allEscuderias);
                mundialFUno.empezarMundial();
                //Borro el fichero mundial si existe
                metodo.borrarFichero(nombreFicheroMundial);
                //Mundial mundialFUno = new Mundial(allCircuitos, allCarreras, allEscuderias);
                metodo.escribirFichero(nombreFicheroMundial, mundialFUno); 
            }else{
                ventanaAviso.mostrarError(this, "No se ha podido crear el Mundial", "Error mundial");
            }
            
      
            
        }
        
        cargarVista();
    }//GEN-LAST:event_empezarMundialActionPerformed

    private void jBtSalidaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtSalidaActionPerformed
       int index=jListPendientes.getSelectedIndex();
        if(index!=-1){
           mundialFUno.getCarreras().get(pendientes.get(index)).doCarrera();
           //Borro el fichero mundial si existe
            metodo.borrarFichero(nombreFicheroMundial);
            //Mundial mundialFUno = new Mundial(allCircuitos, allCarreras, allEscuderias);
            metodo.escribirFichero(nombreFicheroMundial, mundialFUno);
           
           //modifico el fichero de escuderias
           //metodo.borrarFichero(nombreFicheroEscud);
           //reescribo con las modificaciones
           for(int i=0;i<mundialFUno.getEscuderias().size();i++){
                metodo.modificarEscuderia(mundialFUno.getEscuderias().get(i));
           }
          String info=mundialFUno.getCarreras().get(pendientes.get(index)).getInfoCarrera();
           cargarVista();
            
            ventanaAviso.mostrarInfo(this, info, "Información actualizada");
            if(pendientes.isEmpty()){
                ventanaAviso.mostrarInfo(this, mundialFUno.rankingToString(), "Mundial Fiinalizado");
            }
       }else{
           ventanaAviso.mostrarError(this, "Hay que seleccionar una carrera pendiente", "Error Salida");
       }
       
    }//GEN-LAST:event_jBtSalidaActionPerformed

    private void jBtClasifActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBtClasifActionPerformed
        int index=jListCelebradas.getSelectedIndex();
        if(index!=-1){
           String info=mundialFUno.getCarreras().get(celebradas.get(index)).rankingToString();
           ventanaAviso.mostrarInfo(this, info, "carrera:"+mundialFUno.getCarreras().get(celebradas.get(index)).getCircuito().getNombre());
        }else{
           ventanaAviso.mostrarError(this, "Hay que seleccionar una carrera celebrada", "Error Salida");
       }
    }//GEN-LAST:event_jBtClasifActionPerformed

    public DefaultListModel getListModelPendientes(){
        if(listModelPendientes==null){
            listModelPendientes= new DefaultListModel();
        }
        return listModelPendientes;
    }
    public DefaultListModel getListModelCelebradas(){
        if(listModelCelebradas==null){
            listModelCelebradas= new DefaultListModel();
        }
        return listModelCelebradas;
    }
    private DefaultListModel listModelPendientes;
    private DefaultListModel listModelCelebradas;
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton empezarMundial;
    private javax.swing.JButton jBtClasif;
    private javax.swing.JButton jBtSalida;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JList jListCelebradas;
    private javax.swing.JList jListPendientes;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    // End of variables declaration//GEN-END:variables

    private void cargarVista() {
        mundialFUno=metodo.getMundial();
        if (mundialFUno!=null){
            //carga la lista de carreras pendientes
            getListModelPendientes().clear();
            pendientes.clear();
            for(int i=0;i<mundialFUno.getCarreras().size();i++){
                if(mundialFUno.getCarreras().get(i).getClasificacion().isEmpty()){
                    pendientes.add(i);
                    getListModelPendientes().addElement(mundialFUno.getCarreras().get(i).getCircuito().getNombre());
                }
            }   
            jListPendientes.setModel(listModelPendientes);
            
            //carga la lista de carreras celebradas
            getListModelCelebradas().clear();
            celebradas.clear();
            for(int i=0;i<mundialFUno.getCarreras().size();i++){
                if(!mundialFUno.getCarreras().get(i).getClasificacion().isEmpty()){
                    celebradas.add(i);
                    getListModelCelebradas().addElement(mundialFUno.getCarreras().get(i).getCircuito().getNombre());
                }
            }
            jListCelebradas.setModel(listModelCelebradas);
        }
        
    }
}
